package xyz.thetbw.autocode

import com.sksamuel.hoplite.ConfigLoader
import com.sksamuel.hoplite.PropertySource
import mu.KotlinLogging
import java.io.File
import java.nio.charset.Charset

import kotlin.system.exitProcess

private val logger = KotlinLogging.logger{}

/**
 * 配置文件
 */
data class Config(
    val dataSource: DataSourceConfig, //数据库连接配置
    val useTable: String, //使用数据库的表名
    val loadDir: String, //加载路径
    val outDir: String, //输出路径
    val templateExt: String?, //模板后缀，如果有，渲染时移除后缀
    val renderStrictMode: Boolean = true, //是否启用渲染严格模式
    val inputCharset: String = Charset.defaultCharset().name(), //输入编码,默认跟随系统
    val outputCharset: String = Charset.defaultCharset().name() //输出编码,默认跟随系统

) {

    companion object {
        val instance: Config by lazy {
            loadConfig()
        }

        //加载配置文件
        private fun loadConfig(): Config {
            val file = File(Constants.CONFIG_FILE_NAME)
            if (!file.exists()){
                logger.error { "没有找到配置文件 ${Constants.CONFIG_FILE_NAME}" }
                exitProcess(1)
            }
            try {
               return ConfigLoader.Builder()
                    .addSource(PropertySource.file(file))
                    .build().loadConfigOrThrow()
            }catch (e: Exception){
                logger.error(e) {  "配置文件解析失败" }
                exitProcess(1)
            }
        }
    }

    //数据库配置
    data class DataSourceConfig(
         val url: String,
         val username: String,
         val password: String
    )


}